class Keyable a where
   Key a -> String


class Keyable a => IResource abs



instance (Keyable a, Serialize a) => IResource a


data forall a.(Keyable a, Serialize a) => IDynamic a


como ahorrar espacio usando Dynamic

cuand se serializa, RefSerialize va buscando en un map de direcciones de objetos, si encuentra esa direccion usada,
apunta hacia ella. Los Dynamic ocultan eso.  como hacer para que se vean?

now <- whenThisHappened
let x= now + delay
waitForFIFO xs >>= Just   `orElse` waitUntil x  >>  Nothing


waitUntil:: Integer -> STM()
waitUntil t=  do

        threadDelay $ delay* 1000000
        if t - tnow <= 0 then return () else retry

        where


        delay | t-tnow >interval = interval
                | otherwise  = t - tnow

